﻿using System;
using System.ComponentModel;
using System.Reflection;

namespace TImSdk.Util
{
    public static class EnumExtension
    {

        public static string GetEnumDescription(this Enum enumValue)
        {
            string value = enumValue.ToString();
            FieldInfo field = enumValue.GetType().GetField(value);
            object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);    //获取描述属性
            if (objs.Length == 0)    //当描述属性没有时，直接返回名称
                return value;
            DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
            return descriptionAttribute.Description;
        }
        public static string GetEnumDescription<T>(this T enumValue)
        {
            string value = enumValue.ToString();
            FieldInfo field = enumValue.GetType().GetField(value);
            object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);    //获取描述属性
            if (objs.Length == 0)    //当描述属性没有时，直接返回名称
                return value;
            DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
            return descriptionAttribute.Description;
        }

        public static string GetEnumDescription<T>(this int value)
        {
            Type enumType = typeof(T);

            if (!enumType.IsEnum)
            {
                return "T must be an enumerated type";
            }
            var item = (T)Enum.ToObject(enumType, value);
            return item.GetEnumDescription();
        }
    }
}
